﻿using System;

namespace BridgePattern.Sample
{
    // 接口定义
    interface IImplementor
    {
        void OperationImpl();
    }

    // 继承关系，实现接口方法
    class ConcreteImplementor : IImplementor
    {
        public void OperationImpl()
        {
            Console.WriteLine("ConcreteImplementor.OperationImpl => 具体业务方法实现");
        }
    }

    // 建立抽象耦合
    abstract class Abstraction
    {
        protected IImplementor _Impl; //定义实现类接口对象

        public void SetImpl(IImplementor impl)
        {
            _Impl = impl;
        }

        public abstract void Operation();  //声明抽象业务方法
    }

    // 抽象具体实现
    class RefinedAbstraction : Abstraction 
    {
	    public override void Operation() 
        {
            Console.WriteLine("===业务代码（调用方法前）===");
            IImplementor implementor = new ConcreteImplementor();
            SetImpl(implementor);
            _Impl.OperationImpl();  //调用实现类的方法
            Console.WriteLine("===业务代码（调用方法后）===");
        }
    }
}
